package com.cheng.example.book.advise151.chap7;


import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;

/**
 * List接口的toArray方法可以把一个集合转化为数组，但是使用不方便，toArray()方法返回的是一个Object数组，所以需要自行转变
 *
 * 主要功能就是加强这个toArray方法
 */
public class Client100 {


    /**
     *  这是擦除后的代码
     *  public static Object[] toArraychap2(List list) {
     *         // 此处的强制类型转换没必要存在，只是为了与源代码对比
     *         Object[] t = (Object[]) new Object[list.size()];
     *         for (int i = 0, n = list.size(); i < n; i++) {
     *             t[i] = list.get(i);
     *         }
     *         return t;
     *     }
     */


    /**
     * 集合转数组
     * @param list
     * @param <T>
     * @return
     */
    public static <T> T[] toArray(List<T> list) {
        T[] t = (T[]) new Object[list.size()];
        for (int i = 0, n = list.size(); i < n; i++) {
            t[i] = list.get(i);
        }
        return t;
    }


    public static <T> T[] toArray(List<T> list,Class<T> tClass) {
        //声明并初始化一个T类型的数组
        T[] t = (T[])Array.newInstance(tClass, list.size());
        for (int i = 0, n = list.size(); i < n; i++) {
            t[i] = list.get(i);
        }
        return t;
    }


    public static void main(String[] args) {
        List<String> list = Arrays.asList("A","B");
//        String[] stringList = (String[])list.toArray();
        for(String str :(String[]) toArray(list,String.class)){
            System.out.println(str);
        }



    }
}
